package task;

import app.FileMeta;
import util.DBUtil;

import java.io.File;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 根据选择的文件内容，和输入的文本，再数据库中查询数据，返回给页面
 */
public class FileSearch {

    /**
     * 根据输入框搜索数据库的内容，保存在内存中
     * @param dir dir文件路径，一定不为空
     * @param content 用户输入的搜索内容，可能为空，为空展示所有的数据内容
     * @return
     */
    public static List<FileMeta> search(String dir, String content) {
        List<FileMeta> res = new ArrayList<>();
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet resultSet = null;
        //当输入搜索内容为空
        String sql = "select name,path,size,is_directory,last_modified from file_meta where  (path = ? or path like ?)";
        //搜索内容不为空
        if (content != null && content.trim().length() != 0){
            sql += " and (name like ? or pinyin like ? or pinyin_first like ?)";
        }
        try{
            conn = DBUtil.getConnection();
            pst = conn.prepareStatement(sql);
            pst.setString(1,dir);
            pst.setString(2,dir + File.separator + "%");
            if (content != null && content.trim().length() != 0){
                pst.setString(3,"%" + content + "%");
                pst.setString(4,"%" + content + "%");
                pst.setString(5,"%" + content + "%");
            }
            System.out.println("正在搜索内容" + pst);
            resultSet = pst.executeQuery();
            while (resultSet.next()){
                FileMeta meta = new FileMeta();
                meta.setName(resultSet.getString("name"));
                meta.setPath(resultSet.getString("path"));
                meta.setIsDirectory(resultSet.getBoolean("is_directory"));
                if (!meta.getIsDirectory()){//不是文件夹
                    meta.setSize(resultSet.getLong("size"));
                }
                meta.setLastModified(new Date(resultSet.getTimestamp("last_modified").getTime()));
                System.out.println("检索到文件信息"+meta.toString());
                res.add(meta);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            DBUtil.close(pst,resultSet);
        }
        return res;
    }
}
